package com.etsii.android.cliente;


import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Button;

public class ClienteAgenciaActivity extends Activity {
    /** Called when the activity is first created. */
	TextView texto; //texto que esta en cliente.xml
	//Button botonConfirmar;
	//cliente_dinamico cliente;
	
	  private int port_ini;
	  private int nom_cliente;
	  private String host;
	  private SocketBytes Socket;
	
	  private int plaza;
	  
	  private int countPrints; //lleva la cuenta del numero de mensajes que salen en el textView, para limpiar cuando pase un limite
	  private static int MAX_PRINTS = 7;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.cliente);
        
        texto = (TextView) findViewById(R.id.TextoCliente);
        texto.setTextColor(Color.rgb(0, 255, 0)); //texto verde
        
        //botonConfirmar = (Button) findViewById(R.id.button_confirmar);
        //botonConfirmar.setEnabled(false); //empieza el boton estando inhabilitado, hasta que luego se le de al boton reservar
        
        host = InitClienteActivity.maquina; //"192.168.101.76"; //"10.254.109.133";
        //host = "192.168.1.33"; //para depurar
        port_ini = InitClienteActivity.puerto;
        nom_cliente = InitClienteActivity.id_cliente;
        plaza = 0; //aun no ha comprado plaza
        //cliente = new cliente_dinamico(InitClienteActivity.puerto, InitClienteActivity.id_cliente, "10.254.109.133"); //"localhost"); //InitClienteActivity.maquina);
        
        try {
        	Socket = new SocketBytes(host, port_ini);
        	texto.append("Cliente " + nom_cliente + " ha abierto conexion con socket: puerto = " + port_ini);
        	
            // Enviamos entero con nombre de cliente a conectar
            Socket.enviaMensaje(new Integer(nom_cliente));
        } catch (Exception e) // Imprimir cualquier excepcion
        { //System.err.println(e); 
            texto.append("\n" + e.toString());
        }
        
        countPrints = 1;

    }
    
    public void buttonLeerOnClick(View target) {
        //texto.setTextColor(Color.rgb(0, 255, 0)); //texto verde
    	//cliente.lector();
    	
      int dato;

      try {
          Socket.enviaMensaje(new Integer(nom_cliente)); // Envio de identificador 
          Socket.enviaMensaje(new Integer(1)); // Indica que es lector 
          Socket.enviaMensaje(new Integer(1)); // Indica que es acceso a monitor
          Socket.enviaMensaje(new Integer(1)); // Indica que es metodo empezar_leer
          
          Socket.recibeMensaje(); // Espera que conteste servidor indicando que puede empezar a leer.
          // m.empezar_leer();

          Thread.sleep(500);

          Socket.enviaMensaje(new Integer(nom_cliente)); // Envio de identificador
          Socket.enviaMensaje(new Integer(1)); // Indica que es lector 
          Socket.enviaMensaje(new Integer(2)); // Indica que es acceso a base de datos
          Socket.enviaMensaje(new Integer(1)); // Indica que es metodo leer
          dato = ((Integer) Socket.recibeMensaje()).intValue(); // Recepcion de valor leido.
          
          // dato = bd.leer();
          if (countPrints >= MAX_PRINTS) { //limpia el texto y reinicia la cuenta de mensajes
        	  countPrints = 0;
        	  texto.setText(""); //clear text
          }
          texto.append("\nCliente lector " + nom_cliente + " consulta vuelo. quedan " + dato + " plazas. ");
          
          if (plaza > 0)
              texto.append("Su plaza es " + plaza);
          else
        	  texto.append("Aun no ha comprado");

          Socket.enviaMensaje(new Integer(nom_cliente)); // Envio de identificador
          Socket.enviaMensaje(new Integer(1)); // Indica que es lector 
          Socket.enviaMensaje(new Integer(1)); // Indica que es acceso a monitor
          Socket.enviaMensaje(new Integer(2)); // Indica que es metodo acabar_leer
          Socket.recibeMensaje(); // Espera que conteste servidor indicando que puede acabar de leer.
          // m.acabar_leer();
      } catch (Exception e) { texto.append("\n" + e.toString()); }
      
      countPrints++;
    } //buttonLeer
    
    
    public void buttonEscribirOnClick(View target) {
         //texto.setTextColor(Color.rgb(0, 0, 255)); //texto azul
    	
    	 int dato; //lee el numero de plazas que hay, decrementa y luego escribe en servidor

       try {    
           Socket.enviaMensaje(new Integer(nom_cliente)); // Envio de identificador
           Socket.enviaMensaje(new Integer(2)); // Indica que es escritor 
           Socket.enviaMensaje(new Integer(1)); // Indica que es acceso a monitor
           Socket.enviaMensaje(new Integer(3)); // Indica que es metodo empezar_escribir
           Socket.recibeMensaje(); // Espera que conteste servidor indicando que puede empezar a escribir.
           
           
           // m.empezar_escribir();
           if (countPrints >= MAX_PRINTS) { //limpia el texto y reinicia la cuenta de mensajes
         	  countPrints = 0;
         	  texto.setText("");
           }

           Thread.sleep(1000);
           //botonConfirmar.setEnabled(true); //se habilita el boton para confirmar reserva
           
           Socket.enviaMensaje(new Integer(nom_cliente)); // Envio de identificador
           Socket.enviaMensaje(new Integer(2)); // Indica que es escritor 
           Socket.enviaMensaje(new Integer(2)); // Indica que es acceso a base de datos
           Socket.enviaMensaje(new Integer(2)); // Indica que es metodo escribir

            //MODIFICADO:
           dato = ((Integer) Socket.recibeMensaje()).intValue(); //recibe el numero de plazas que hay

           if (dato > 0) {
              if (plaza > 0) //si ya se habia comprado
            	  texto.append("\nHa comprado otro mas");

              plaza = dato; //actualiza plaza
              dato--; //se disminuyen las plazas
              Socket.enviaMensaje(new Integer(dato)); // Indica dato a escribir
              Socket.recibeMensaje(); // Espera que conteste servidor que se ha escrito.
              // bd.escribir(dato);
              texto.append("\nCliente escritor " + nom_cliente + " compra vuelo. " + "Quedan " + dato + " plazas.\n Su plaza es: " + plaza);
           }
           else
        	   texto.append("\nLo sentimos, ya no quedan plazas");

           Socket.enviaMensaje(new Integer(nom_cliente)); // Envio de identificador
           Socket.enviaMensaje(new Integer(2)); // Indica que es escritor
           Socket.enviaMensaje(new Integer(1)); // Indica que es acceso a monitor
           Socket.enviaMensaje(new Integer(4)); // Indica que es metodo acabar_escribir
           Socket.recibeMensaje(); // Espera que conteste servidor indicando que puede acabar de escribir.
           // m.acabar_escribir();
       } catch (Exception e) { texto.append("\n" + e.toString()); }
    	
       countPrints++;
    } //buttonEscribir
    
    
    /*public void buttonConfirmarOnClick(View target) {
    	texto.append("\n plaza confirmada");
    	botonConfirmar.setEnabled(false);
    }*/
    
}